common.skill

রাউটিং এবং Middleware (Routing and Middleware)

Microsoft Technologies - ডট নেট কোর (Dot.Net Core)
218
218

ASP.NET Core-এ রাউটিং এবং Middleware দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা, যা ওয়েব অ্যাপ্লিকেশনের কাজ করার পদ্ধতি নির্ধারণ করে। রাউটিং এর মাধ্যমে নির্দিষ্ট URL এর জন্য একটি নির্দিষ্ট একশন অথবা ভিউ অ্যাসোসিয়েট করা হয়, এবং Middleware বিভিন্ন রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়াতে হস্তক্ষেপ করে বিভিন্ন কার্য সম্পন্ন করে।


ASP.NET Core এ Routing কনফিগার করা

রাউটিং হল প্রক্রিয়া যা HTTP রিকোয়েস্টের URL পাথের সাথে মেলানোর মাধ্যমে কনট্রোলার এবং অ্যাকশন মেথডে রিকোয়েস্ট পাঠায়। ASP.NET Core রাউটিং খুবই লচিল এবং কাস্টমাইজেবল।

  1. Default Routing
    ASP.NET Core ডিফল্ট রাউটিং কনভেনশন ব্যবহার করে, যেখানে URL প্যাটার্নটি কিছুটা স্ট্যাটিক থাকে। সাধারণত, ডিফল্ট রাউটিং কনভেনশন এভাবে থাকে:

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
    

    এখানে, {controller}, {action}, এবং {id?} হল রাউট প্যারামিটার যা URL এর অংশ হিসেবে আসে। উদাহরণস্বরূপ, http://localhost:5000/Home/Index/1 URL এর মাধ্যমে HomeController এর Index অ্যাকশন মেথডে রিকোয়েস্ট পাঠানো হবে।

  2. Attribute Routing
    ASP.NET Core রাউটিং কনফিগারেশনের একটি উন্নত ফিচার হল Attribute Routing। এর মাধ্যমে, প্রতিটি কনট্রোলার এবং অ্যাকশনের রাউট URL কাস্টমাইজ করা যায়, যেমন:

    [Route("home")]
    public class HomeController : Controller
    {
        [Route("index/{id?}")]
        public IActionResult Index(int? id)
        {
            return View();
        }
    }
    

    এখানে, home/index/1 URL দিয়ে Index অ্যাকশন কল করা হবে, যেখানে id প্যারামিটারটি ঐচ্ছিক (Optional)।


Middleware কী এবং কীভাবে কাজ করে?

Middleware হল এমন একটি কম্পোনেন্ট যা HTTP পিপলাইন (request-response pipeline) এ কাজ করে। যখন একটি HTTP রিকোয়েস্ট আসে, তখন এটি Middleware এর একটি সিরিজের মধ্য দিয়ে প্রক্রিয়াকৃত হয়, এবং শেষে একটি HTTP রেসপন্স তৈরি হয়।

Middleware বিভিন্ন কাজ করতে পারে যেমন:

  • রিকোয়েস্ট লগিং
  • রিকোয়েস্টের মধ্যে সিকিউরিটি চেক করা
  • অডিটিং, অথেন্টিকেশন এবং অথোরাইজেশন
  • রেসপন্স মডিফাই করা

ASP.NET Core এর Middleware সিস্টেম খুবই শক্তিশালী এবং কাস্টমাইজেবল, এবং এটি সাধারণত স্ট্যাক হিসেবে কাজ করে, যেখানে একের পর এক Middleware চলতে থাকে।

  1. Middleware ইনজেকশন
    Middleware অ্যাড করার জন্য Configure মেথডে app.Use() ব্যবহার করা হয়:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
    
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
    

    এখানে, UseDeveloperExceptionPage এবং UseExceptionHandler Middleware এর উদাহরণ, যা অ্যাপ্লিকেশনের ত্রুটি সমাধানে ব্যবহৃত হয়।

  2. Custom Middleware তৈরি
    আপনি চাইলে Custom Middleware তৈরি করতে পারেন। একটি সাধারণ কাস্টম Middleware দেখতে এমন হবে:

    public class CustomMiddleware
    {
        private readonly RequestDelegate _next;
    
        public CustomMiddleware(RequestDelegate next)
        {
            _next = next;
        }
    
        public async Task InvokeAsync(HttpContext httpContext)
        {
            // Middleware logic (e.g., logging)
            await _next(httpContext); // Call the next middleware
        }
    }
    

    এই Middleware কে Startup.cs ফাইলে যোগ করা হয়:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseMiddleware<CustomMiddleware>();
    }
    
  3. Short-circuiting Middleware
    কিছু Middleware রিকোয়েস্ট প্রক্রিয়া থামিয়ে দিতে পারে, যাতে পরে আর কোনো Middleware কাজ না করে। উদাহরণস্বরূপ, Authorization Middleware সিস্টেমে প্রবেশের আগেই থামিয়ে দিতে পারে যদি ইউজার অথেন্টিকেটেড না থাকে।

ASP.NET Core Middleware এর কিছু সাধারণ উদাহরণ

  1. Static Files Middleware
    স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ ফাইল) সার্ভ করার জন্য UseStaticFiles() Middleware ব্যবহার করা হয়:

    app.UseStaticFiles();
    
  2. Authentication Middleware
    অ্যাপ্লিকেশন সিকিউর করার জন্য Authentication Middleware ব্যবহার করা হয়। উদাহরণস্বরূপ, Identity Middleware:

    app.UseAuthentication();
    
  3. Error Handling Middleware
    ত্রুটি হ্যান্ডলিং এবং ডিবাগিং এর জন্য Error Handling Middleware ব্যবহার করা হয়:

    app.UseExceptionHandler("/Home/Error");
    
  4. CORS Middleware
    Cross-Origin Resource Sharing (CORS) Middleware ব্যবহার করা হয় যেহেতু অ্যাপ্লিকেশনটি বিভিন্ন ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করতে পারে:

    app.UseCors(builder =>
        builder.WithOrigins("http://example.com")
               .AllowAnyMethod()
               .AllowAnyHeader());
    

সারাংশ
ASP.NET Core-এ রাউটিং এবং Middleware ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটির রিকোয়েস্ট-রেসপন্স পিপলাইন নিয়ন্ত্রণ করা যায়। রাউটিং URL প্যাটার্নের সাথে অ্যাকশন মেথড অ্যাসোসিয়েট করে, এবং Middleware বিভিন্ন পর্যায়ে রিকোয়েস্ট প্রক্রিয়া করে, যেমন সিকিউরিটি, লগিং, বা রেসপন্স মডিফিকেশন। কাস্টম Middleware তৈরি করা, স্ট্যাটিক ফাইল সার্ভ করা, এবং Authentication এর মতো সাধারণ ফিচারও Middleware এর মাধ্যমে ইমপ্লিমেন্ট করা যায়।

common.content_added_by

ASP.Net Core এ Routing কনফিগার করা

219
219

Routing হল একটি প্রক্রিয়া যার মাধ্যমে ASP.Net Core অ্যাপ্লিকেশন ইনকামিং HTTP রিকোয়েস্টকে নির্দিষ্ট কন্ট্রোলার এবং একশন মেথডের সাথে ম্যাপ করে। রাউটিং কনফিগারেশন সঠিকভাবে না করলে অ্যাপ্লিকেশনটি সঠিকভাবে রিকোয়েস্ট প্রক্রেস করতে পারবে না। ASP.Net Core এ রাউটিং কনফিগার করা বেশ সহজ, এবং আপনি এটি Startup.cs ফাইলে করতে পারেন।


Routing কনফিগারেশনের ধাপ

  1. Route Configuration

    ASP.Net Core অ্যাপ্লিকেশনে রাউটিং কনফিগার করার জন্য সাধারণত Configure মেথডে UseRouting এবং UseEndpoints মেথড ব্যবহার করা হয়।

    public class Startup
    {
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            // রাউটিং কনফিগার করা
            app.UseRouting();  // রাউটিং সিস্টেম চালু করবে
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
    

    উপরের কোডে, MapControllerRoute মেথড দিয়ে রাউটিং প্যাটার্নটি কনফিগার করা হয়েছে। এখানে {controller=Home} মানে HomeController ডিফল্ট কন্ট্রোলার হবে, {action=Index} মানে Index অ্যাকশন মেথড ডিফল্ট হবে, এবং {id?} হলো একটি অপশনাল প্যারামিটার।


Route Pattern

ASP.Net Core এ রাউটিং প্যাটার্ন সাধারণত URL প্যাটার্নের মাধ্যমে নির্ধারণ করা হয়। রাউটিং প্যাটার্নের জন্য কিছু সাধারণ টেমপ্লেট নীচে দেওয়া হল:

  • {controller}: URL-এ কন্ট্রোলারের নাম।
  • {action}: URL-এ একশন মেথডের নাম।
  • {id?}: একটি অপশনাল প্যারামিটার (যদি প্রযোজ্য হয়)।

উদাহরণস্বরূপ, যদি আমরা MapControllerRoute ব্যবহার করি:

endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

এই রাউটিং প্যাটার্নটি নির্দেশ করে যে, যদি URL এর মধ্যে কোনো কন্ট্রোলার বা অ্যাকশন নাম উল্লেখ না থাকে, তাহলে ডিফল্টভাবে HomeController এর Index অ্যাকশনটি কল হবে। যদি id প্যারামিটার দেওয়া থাকে, তবে সেটি ঐ অ্যাকশনে পাস হবে।


Attribute Routing

ASP.Net Core এ আপনি Attribute Routing ব্যবহার করে URL এর সাথে কন্ট্রোলার এবং অ্যাকশন মেথড নির্দিষ্ট করতে পারেন। এর মাধ্যমে আপনি প্রতিটি কন্ট্রোলার এবং একশন মেথডে রাউটিং প্যাটার্ন নির্ধারণ করতে পারেন।

Attribute Routing উদাহরণ:

[Route("home")]
public class HomeController : Controller
{
    [Route("")]
    public IActionResult Index()
    {
        return View();
    }

    [Route("about")]
    public IActionResult About()
    {
        return View();
    }
}

এখানে HomeController এর Index অ্যাকশনটি /home পাথের মাধ্যমে এক্সেস হবে এবং About অ্যাকশনটি /home/about পাথের মাধ্যমে এক্সেস হবে।


Route Constraints

ASP.Net Core রাউটিং প্যাটার্নে কনস্ট্রেইন্টস ব্যবহার করে URL প্যারামিটার গুলোর বৈধতা যাচাই করা সম্ভব। যেমন, আপনি id প্যারামিটারের জন্য নির্দিষ্ট করতে পারেন যে তা একটি সংখ্যা হতে হবে।

Route Constraints উদাহরণ:

[Route("product/{id:int}")]
public IActionResult ProductDetails(int id)
{
    return View();
}

এখানে {id:int} কনস্ট্রেইন্টটি নির্দেশ করে যে id প্যারামিটারটি শুধুমাত্র পূর্ণসংখ্যা হতে হবে। যদি প্যারামিটারটি অন্য ধরনের হয়, তবে রিকোয়েস্টটি ব্যর্থ হবে এবং 404 Not Found ত্রুটি দেখাবে।


Multiple Routes

একই কন্ট্রোলার বা একশন মেথডের জন্য একাধিক রাউটিং প্যাটার্ন নির্ধারণ করা যেতে পারে।

Multiple Routes উদাহরণ:

[Route("product")]
[Route("item")]
public IActionResult ProductDetails()
{
    return View();
}

এখানে ProductDetails একশনটি /product এবং /item উভয় রাউটে এক্সেস করা যাবে।


সারাংশ

ASP.Net Core এ রাউটিং কনফিগার করা একটি সহজ প্রক্রিয়া। আপনি সাধারণভাবে Configure মেথডে UseRouting এবং UseEndpoints ব্যবহার করে রাউটিং প্যাটার্ন সেট করতে পারেন। এছাড়া Attribute Routing, Route Constraints, এবং Multiple Routes এর মতো ফিচারগুলো ব্যবহার করে আরো উন্নত রাউটিং কনফিগারেশন করা সম্ভব। এই কনফিগারেশনগুলো আপনার অ্যাপ্লিকেশনকে আরও ইউজার-ফ্রেন্ডলি এবং সুগম করে তোলে।

common.content_added_by

Attribute Routing

196
196

Attribute Routing হল ASP.NET Core-এ রাউটিং কনফিগারেশনের একটি শক্তিশালী এবং নমনীয় পদ্ধতি। এই পদ্ধতিতে, রাউটিং তথ্য সরাসরি কন্ট্রোলার এবং অ্যাকশন মেথডগুলির উপর অ্যাট্রিবিউট আকারে নির্ধারণ করা হয়, যার ফলে রাউটিং কনফিগারেশন আরও পরিষ্কার এবং সহজে পরিচালনাযোগ্য হয়।


Attribute Routing কী?

Attribute Routing এর মাধ্যমে আপনি কন্ট্রোলার এবং কন্ট্রোলারের মেথডগুলিতে রাউটিং কনফিগারেশন নির্দিষ্ট করতে পারেন। এর ফলে, URL প্যাটার্ন সরাসরি অ্যাকশন মেথডের উপরে সংজ্ঞায়িত করা যায়। এটি সাধারণত Route অ্যাট্রিবিউট ব্যবহার করে কনফিগার করা হয়।

এই পদ্ধতির প্রধান সুবিধা হলো এটি রাউটিংকে কন্ট্রোলারের মেথডের কাছে এনে দেয়, যার ফলে কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ আরও সহজ হয়ে যায়।


Attribute Routing কিভাবে কাজ করে?

ASP.NET Core-এ Attribute Routing কাজ করার জন্য, [Route] অ্যাট্রিবিউট ব্যবহার করা হয়। এই অ্যাট্রিবিউট কন্ট্রোলার বা অ্যাকশন মেথডের উপরে সংযোজিত হয় এবং এর মাধ্যমে রাউটিং প্যাটার্ন নির্ধারণ করা হয়।

উদাহরণ: কিভাবে Attribute Routing কাজ করে

using Microsoft.AspNetCore.Mvc;

namespace MyApp.Controllers
{
    [Route("api/[controller]")]
    public class ProductsController : Controller
    {
        // GET api/products
        [HttpGet]
        public IActionResult GetAllProducts()
        {
            return Ok(new { message = "Getting all products" });
        }

        // GET api/products/5
        [HttpGet("{id}")]
        public IActionResult GetProductById(int id)
        {
            return Ok(new { message = $"Getting product with ID {id}" });
        }

        // POST api/products
        [HttpPost]
        public IActionResult CreateProduct([FromBody] Product product)
        {
            return Ok(new { message = "Product created" });
        }
    }
}

এখানে, [Route("api/[controller]")]) অ্যাট্রিবিউটটি ProductsController কন্ট্রোলারের জন্য রাউট নির্ধারণ করে, যেখানে [controller] কে কন্ট্রোলারের নাম (যেমন Products) দ্বারা প্রতিস্থাপন করা হয়। এর পরে, [HttpGet], [HttpGet("{id}")], এবং [HttpPost] অ্যাট্রিবিউটগুলি অ্যাকশন মেথডগুলির জন্য নির্দিষ্ট HTTP পদ্ধতিগুলি চিহ্নিত করে।


Attribute Routing-এর সুবিধা

  • সুনির্দিষ্ট রাউটিং প্যাটার্ন: Attribute Routing কনফিগারেশনের জন্য অ্যাট্রিবিউট সরাসরি কন্ট্রোলার এবং অ্যাকশন মেথডগুলিতে প্রয়োগ করা হয়, যা আরও পরিষ্কার এবং সহজবোধ্য রাউটিং প্রদান করে।
  • Dynamic URL গঠন: URL প্যাটার্নগুলি অ্যাকশন মেথডের সাথে সম্পর্কিত থাকে, তাই আপনি সহজেই প্রতিটি অ্যাকশন মেথডের জন্য অনন্য রাউট তৈরি করতে পারেন।
  • Reusable Route Templates: রাউটের অংশে পরিবর্তনশীল প্যারামিটার অন্তর্ভুক্ত করা যায়, যেমন {id} বা {name}। এটি ডাইনামিক রাউট তৈরি করতে সাহায্য করে।
  • Route Constraints: আপনি URL প্যারামিটারগুলির জন্য কন্ডিশন বা কনস্ট্রেইন্ট যোগ করতে পারেন, যেমন সংখ্যার জন্য {id:int}

Attribute Routing এর উদাহরণ

এখানে একটি Attribute Routing উদাহরণ দেওয়া হলো যেখানে কন্ট্রোলার এবং অ্যাকশন মেথডগুলির রাউটিং নির্দিষ্ট করা হয়েছে:

using Microsoft.AspNetCore.Mvc;

namespace MyApp.Controllers
{
    // Controller level route
    [Route("api/[controller]")]
    public class ProductsController : Controller
    {
        // GET api/products
        [HttpGet]
        public IActionResult GetAllProducts()
        {
            return Ok("Getting all products");
        }

        // GET api/products/5
        [HttpGet("{id:int}")]
        public IActionResult GetProduct(int id)
        {
            return Ok($"Getting product with ID {id}");
        }

        // POST api/products
        [HttpPost]
        public IActionResult CreateProduct([FromBody] Product product)
        {
            return Ok("Product created successfully");
        }

        // PUT api/products/5
        [HttpPut("{id}")]
        public IActionResult UpdateProduct(int id, [FromBody] Product product)
        {
            return Ok($"Product with ID {id} updated");
        }

        // DELETE api/products/5
        [HttpDelete("{id}")]
        public IActionResult DeleteProduct(int id)
        {
            return Ok($"Product with ID {id} deleted");
        }
    }
}

এখানে, প্রতিটি মেথডে HttpGet, HttpPost, HttpPut, এবং HttpDelete অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা তাদের সম্পর্কিত HTTP পদ্ধতি নির্দেশ করে। এছাড়া, {id:int} কনস্ট্রেইন্ট ব্যবহার করা হয়েছে, যা নিশ্চিত করে যে id প্যারামিটারটি একটি পূর্ণসংখ্যা হবে।


রাউটিং কনস্ট্রেইনট (Route Constraints)

Attribute Routing-এ কনস্ট্রেইনট ব্যবহার করলে URL প্যারামিটারগুলির ধরন এবং মান নির্ধারণ করা যেতে পারে। যেমন:

  • {id:int}: এটি নিশ্চিত করে যে id একটি পূর্ণসংখ্যা (integer) হবে।
  • {name:length(10)}: এটি নিশ্চিত করে যে name প্যারামিটারটির দৈর্ঘ্য ১০-এর কম হবে।

এটি কন্ট্রোলার এবং অ্যাকশন মেথডগুলির মধ্যে সুনির্দিষ্ট রাউটিং কনফিগারেশন প্রদান করে।


সারাংশ

Attribute Routing হল ASP.NET Core এ একটি শক্তিশালী রাউটিং পদ্ধতি, যা URL প্যাটার্ন সরাসরি কন্ট্রোলার এবং অ্যাকশন মেথডের উপর অ্যাট্রিবিউট আকারে নির্ধারণ করতে সাহায্য করে। এর মাধ্যমে আপনি সহজে এবং পরিষ্কারভাবে কনফিগারেশন করতে পারেন, এবং ডাইনামিক, কাস্টমাইজড রাউট তৈরি করতে সক্ষম হন। Attribute Routing এর প্রধান সুবিধা হলো কোডের পাঠযোগ্যতা বাড়ানো এবং রাউটিং ম্যানেজমেন্ট সহজতর করা।

common.content_added_by

Middleware কী এবং কীভাবে কাজ করে?

181
181

Middleware হল সফটওয়্যার বা কোডের একটি স্তর যা ASP.NET Core অ্যাপ্লিকেশনটির রিকোয়েস্ট-পদ্ধতি চেইনে ব্যবহৃত হয়। এটি একটি পেইজ বা HTTP রিকোয়েস্ট প্রসেসিং সিস্টেমে ইনপুট এবং আউটপুটের মধ্যে একটি "মাঝখানে" অবস্থান নেয়। সহজভাবে বললে, Middleware কোডের একাধিক অংশ একে অপরের সাথে যোগাযোগ করতে সক্ষম করে, যাতে সার্ভার ক্লায়েন্ট থেকে আসা রিকোয়েস্ট এবং সার্ভার থেকে বের হওয়া রেসপন্স প্রসেস করতে পারে।

এটি অ্যাপ্লিকেশনের রিকোয়েস্ট লাইফসাইকেল পরিচালনার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে এবং সাধারণত একটি pipeline (পাইপলাইন) হিসেবে কাজ করে, যেখানে একাধিক middleware একে অপরের সাথে সম্পর্কিতভাবে কাজ করে।


Middleware কিভাবে কাজ করে?

Middleware সাধারণত রিকোয়েস্ট রিসিভ করার পর প্রথমে প্রসেস শুরু করে এবং তারপর রেসপন্স আউটপুট দেয়। যখন একটি HTTP রিকোয়েস্ট একটি ASP.NET Core অ্যাপ্লিকেশনে আসে, তখন তা আগে middleware পিপলাইনের মধ্য দিয়ে প্রবাহিত হয় এবং প্রত্যেকটি middleware এর মধ্যে কিছু নির্দিষ্ট কাজ সম্পাদন করে। এর পরে, রেসপন্স আবার middleware পিপলাইনে মাধ্যমে ফিরে যায়।

একটি সাধারণ middleware পিপলাইন নিম্নরূপ কাজ করে:

  1. রিকোয়েস্ট প্রবাহ: যখন ক্লায়েন্ট একটি HTTP রিকোয়েস্ট পাঠায়, তা প্রথমে middleware পিপলাইনে প্রবাহিত হয়। প্রতিটি middleware এর মধ্যে কিছু নির্দিষ্ট কাজ সম্পাদিত হয়, যেমন রিকোয়েস্ট লোগিং, রিকোয়েস্ট ভ্যালিডেশন, কিংবা ইউজার অথেনটিকেশন।
  2. Middleware এর কাজ: Middleware গুলি রিকোয়েস্টে কোন কাজ করে দেখিয়ে বা কোনও নির্দিষ্ট তথ্য যোগ করে। উদাহরণস্বরূপ, অ্যাপ্লিকেশন একটি logging middleware ব্যবহার করতে পারে যা প্রতিটি রিকোয়েস্টের লোগ জেনারেট করবে।
  3. Next Middleware: যদি একটি middleware তার কাজ শেষ করে পরবর্তী middleware এ রিকোয়েস্ট পাঠাতে চায়, তবে এটি next() মেথড কল করে। এর মাধ্যমে পরবর্তী middleware কাজ শুরু করবে।
  4. রেসপন্স: একবার সমস্ত middleware রিকোয়েস্ট প্রসেস করে ফেললে, তখন রেসপন্স অ্যাপ্লিকেশন থেকে ক্লায়েন্টের কাছে ফিরে যায়। পিপলাইনের মধ্যে যদি কোনো middleware রেসপন্সে কোন পরিবর্তন করতে চায় (যেমন, রেসপন্স হেডার পরিবর্তন করা বা কন্টেন্ট লম্বা সময়ের জন্য ক্যাশে করা), তবে তা করতে পারে।
  5. Middleware এর শেষে: যখন রেসপন্স ফিরে আসবে, তখন প্রাথমিক middleware আবার "reverse" অর্ডারে কাজ করতে পারে। এতে, রেসপন্স ফেরত পাঠানোর আগে কিছু কাজ সম্পাদন করা সম্ভব হয়, যেমন লোগিং বা সিকিউরিটি চেক।

Middleware এর উদাহরণ

ASP.NET Core অ্যাপ্লিকেশনগুলিতে বিভিন্ন ধরনের middleware ব্যবহৃত হয়। কিছু উদাহরণ হলো:

  • Logging Middleware: অ্যাপ্লিকেশনটি HTTP রিকোয়েস্ট এবং রেসপন্সের লগ রাখতে পারে। এটি সাধারণত প্রতিটি রিকোয়েস্টের পর রিকোয়েস্টের তথ্য এবং সার্ভারের রেসপন্সের স্টেটাস কোড লোগ করে রাখে।
  • Authentication Middleware: এটি রিকোয়েস্টের মাধ্যমে ইউজারের অথেনটিকেশন চেক করে, যদি ইউজার সঠিকভাবে লগইন না করে থাকে, তবে তাকে লগইন পেজে রিডাইরেক্ট করে।
  • Authorization Middleware: Authentication-এর পরে, Authorization Middleware ইউজারের অনুমতি যাচাই করে। এটি চেক করে যে, ব্যবহারকারী নির্দিষ্ট রিসোর্সে প্রবেশ করার অনুমতি পায় কিনা।
  • Exception Handling Middleware: এটি অ্যাপ্লিকেশনের মধ্যে যে কোন এক্সসেপশন বা ত্রুটি হ্যান্ডেল করে, যাতে সার্ভারে কোন আউটপুট না আসে অথবা ইউজারের কাছে সঠিক ত্রুটি বার্তা প্রদর্শিত হয়।
  • Static Files Middleware: যদি আপনার অ্যাপ্লিকেশন স্ট্যাটিক ফাইল (যেমন HTML, CSS, JavaScript, ইমেজ) ব্যবহার করে থাকে, তবে এটি সেই ফাইলগুলো ক্লায়েন্টে সঠিকভাবে সার্ভ করতে সাহায্য করে।

Middleware কনফিগারেশন এবং Custom Middleware তৈরি

ASP.NET Core অ্যাপ্লিকেশনে middleware কনফিগার করা হয় Startup.cs ফাইলের Configure মেথডে। এখানে আপনি middleware গুলি যোগ করতে পারেন এবং তাদের ক্রম ঠিক করতে পারেন।

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        // Default middleware
        app.UseRouting();  // Request routing middleware
        
        app.UseAuthentication(); // Authentication middleware
        app.UseAuthorization();  // Authorization middleware

        // Custom middleware
        app.Use(async (context, next) =>
        {
            // Custom logic before passing the request
            await next.Invoke();
            // Custom logic after the request has passed through the pipeline
        });

        // Static files middleware
        app.UseStaticFiles();  // Serves static files like HTML, CSS, JS

        // Fallback to a page or other action if nothing matches
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();  // MVC Controller endpoints
        });
    }
}

এখানে Use মেথডটি বিভিন্ন middleware যুক্ত করার জন্য ব্যবহার করা হয়। প্রাথমিকভাবে, middleware গুলি রিকোয়েস্টের উপর কাজ করে, তারপর রেসপন্স ফেরত পাঠায়।


Custom Middleware তৈরি

ASP.NET Core-এ custom middleware তৈরি করা খুবই সহজ। সাধারণত, একটি ক্লাস তৈরি করা হয় যা IMiddleware ইন্টারফেস ইমপ্লিমেন্ট করে বা Invoke মেথডের মাধ্যমে কার্যকর করা হয়।

এখানে একটি উদাহরণ দেওয়া হলো:

public class MyCustomMiddleware
{
    private readonly RequestDelegate _next;

    public MyCustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // Custom logic before passing to next middleware
        Console.WriteLine("Request received by custom middleware");

        await _next(context); // Passing control to next middleware

        // Custom logic after the request has passed through the pipeline
        Console.WriteLine("Response sent from custom middleware");
    }
}

এটি এরপর Startup.cs-এ Configure মেথডে যুক্ত করা হয়:

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<MyCustomMiddleware>();
}

সারাংশ

Middleware হল .NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যে একটি পিপলাইন তৈরি করে। এটি বিভিন্ন কাজ যেমন Authentication, Authorization, লোগিং, এক্সসেপশন হ্যান্ডলিং এবং স্ট্যাটিক ফাইল সার্ভিংয়ের জন্য ব্যবহৃত হয়। ASP.NET Core অ্যাপ্লিকেশনে middleware কনফিগার এবং কাস্টম middleware তৈরি করা সহজ, যা অ্যাপ্লিকেশনকে আরও কার্যকর এবং কাস্টমাইজেবল করে তোলে।

common.content_added_by

Custom Middleware তৈরি

197
197

Middleware হলো ASP.NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ, যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রসেসের মধ্যে কোনো একটি অতিরিক্ত কার্যক্রম সম্পাদন করে। Custom Middleware তৈরি করা মানে হলো আপনি আপনার প্রয়োজন অনুযায়ী একটি নতুন middleware কম্পোনেন্ট তৈরি করবেন যা রিকোয়েস্ট এবং রেসপন্স সাইকেলে নিজস্ব লজিক বা কার্যক্রম যোগ করবে।

ASP.NET Core অ্যাপ্লিকেশন ডেভেলপ করার সময় প্রাথমিকভাবে বেশ কিছু বিল্ট-ইন Middleware পাওয়া যায়, যেমন Authentication, Authorization, Caching ইত্যাদি। কিন্তু অনেক সময় কিছু বিশেষ কার্যক্রম সম্পাদনের জন্য কাস্টম Middleware তৈরি করতে হতে পারে।

Custom Middleware তৈরি করার ধাপসমূহ

1. Middleware ক্লাস তৈরি করা

প্রথমে একটি ক্লাস তৈরি করতে হবে যা IMiddleware ইন্টারফেস বা RequestDelegate ব্যবহার করবে।

public class CustomMiddleware
{
    private readonly RequestDelegate _next;

    public CustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // Middleware এর শুরুতে কিছু কার্যক্রম করা
        Console.WriteLine("Request started");

        // রিকোয়েস্ট পরবর্তী Middleware বা রেসপন্স প্রসেসে পাস করা
        await _next(context);

        // Middleware এর শেষে কিছু কার্যক্রম করা
        Console.WriteLine("Response completed");
    }
}

এই কোডে, RequestDelegate হলো পরবর্তী Middleware অথবা রেসপন্স হ্যান্ডলারকে কল করার জন্য ব্যবহার করা হয়। InvokeAsync মেথডে আপনি আপনার কার্যক্রম যোগ করতে পারেন। এখানে আমরা কেবল রিকোয়েস্ট স্টার্ট এবং রেসপন্স কমপ্লিট হওয়ার সময় কনসোলে মেসেজ লিখেছি।

2. Custom Middleware রেজিস্টার করা

আপনার কাস্টম Middleware অ্যাপ্লিকেশনে ব্যবহারের জন্য Startup.cs (বা Program.cs যদি .NET 6+ ব্যবহার করেন) ফাইলে রেজিস্টার করতে হবে। এখানে Configure মেথডে UseMiddleware মেথড ব্যবহার করে Middleware রেজিস্টার করা হয়।

public class Startup
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // কাস্টম Middleware রেজিস্টার করা
        app.UseMiddleware<CustomMiddleware>();

        // অন্য বিল্ট-ইন Middleware গুলি
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGet("/", async context =>
            {
                await context.Response.WriteAsync("Hello, world!");
            });
        });
    }
}

এখানে UseMiddleware<CustomMiddleware>() ব্যবহার করে আমাদের কাস্টম Middleware অ্যাপ্লিকেশনে যুক্ত করা হয়েছে। এর মানে হলো, যখন একটি HTTP রিকোয়েস্ট আসবে, তখন সেই রিকোয়েস্ট প্রথমে CustomMiddleware দিয়ে যাবে এবং তারপর অন্যান্য Middleware ও হ্যান্ডলারগুলো কাজ করবে।

3. Custom Middleware এর অন্যান্য বৈশিষ্ট্য

কাস্টম Middleware তৈরি করতে গিয়ে আপনি বিভিন্ন ধরনের কাজ করতে পারেন, যেমন:

  • Logging: রিকোয়েস্ট এবং রেসপন্সের লগ রাখা।
  • Authentication: বিশেষ কোনো অথেনটিকেশন বা অথরাইজেশন চেক করা।
  • Error Handling: এক্সপেশন হ্যান্ডলিং করা।
  • CORS (Cross-Origin Resource Sharing): কাস্টম CORS পলিসি তৈরি করা।

Middleware এর কাজ করার পদ্ধতি

ASP.NET Core অ্যাপ্লিকেশনে Middleware গুলি চেইন আকারে একে অপরের সঙ্গে যুক্ত থাকে। একটি Middleware পরবর্তী Middleware কে কল করার মাধ্যমে পুরো HTTP রিকোয়েস্ট প্রসেস সম্পন্ন হয়।

  • Request Processing: রিকোয়েস্ট যখন আসবে, তখন Middleware গুলি একে একে প্রসেস হবে।
  • Response Processing: রিকোয়েস্ট পরবর্তী রেসপন্স অ্যাপ্লিকেশনের মধ্য দিয়ে ফেরত আসার সময়েও Middleware গুলি রেসপন্স প্রসেস করবে।

Custom Middleware এর ব্যবহার উদাহরণ

ধরা যাক, আপনি যদি একটি কাস্টম Middleware তৈরি করতে চান যা রিকোয়েস্টের হেডার চেক করে দেখবে যে, "X-Api-Key" নামক একটি হেডার আছে কিনা, এবং যদি না থাকে তবে 401 Unauthorized রেসপন্স ফিরিয়ে দেবে।

public class ApiKeyMiddleware
{
    private readonly RequestDelegate _next;

    public ApiKeyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        if (!context.Request.Headers.ContainsKey("X-Api-Key"))
        {
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
            await context.Response.WriteAsync("API Key is missing");
            return;
        }

        // API Key রয়েছে, পরবর্তী Middleware এ পাস করা
        await _next(context);
    }
}

এখন, এই Middleware কে Startup.cs-এ রেজিস্টার করলে, আপনি যে কোনো HTTP রিকোয়েস্টে X-Api-Key হেডার না থাকলে 401 Unauthorized রেসপন্স পাবেন।

Custom Middleware এর চ্যালেঞ্জ

  1. Performance Overhead: অতিরিক্ত Middleware ব্যবহার করলে রিকোয়েস্ট প্রসেসিং কিছুটা ধীর হতে পারে।
  2. Order of Middleware: Middleware গুলি সঠিকভাবে সজ্জিত করা গুরুত্বপূর্ণ, কারণ এগুলোর অর্ডার নির্ধারণ করে কিভাবে HTTP রিকোয়েস্ট এবং রেসপন্স প্রসেস হবে।
  3. Error Handling: Middleware গুলোর মধ্যে যদি কোনো এক্সপেশন ঘটে, তবে সেটা ঠিকভাবে হ্যান্ডেল করা উচিত, অন্যথায় পুরো অ্যাপ্লিকেশন ক্র্যাশ হতে পারে।

সারাংশ

Custom Middleware তৈরি করা ASP.NET Core অ্যাপ্লিকেশনের একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে অ্যাপ্লিকেশনের HTTP রিকোয়েস্ট প্রসেসে নিজের প্রয়োজনীয় কার্যক্রম যোগ করার সুযোগ দেয়। Middleware তৈরি এবং কনফিগার করার মাধ্যমে আপনি অ্যাপ্লিকেশনের সিকিউরিটি, লগিং, এবং কাস্টম কাজগুলো সম্পন্ন করতে পারেন। Middleware গুলোর সঠিক অর্ডার এবং কার্যক্রম নিশ্চিত করা গুরুত্বপূর্ণ যাতে অ্যাপ্লিকেশন সঠিকভাবে কাজ করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion